Zeigen Sie ein Popup / Meldungsfeld aus einer Windows-Batch-Datei
-
13-09-2019 - |
Frage
Gibt es eine Möglichkeit, ein Meldungsfeld aus einer Batchdatei (ähnlich wie xmessage
von Bash-Skripts in Linux verwendet werden kann)?
Lösung
würde ich eine sehr einfache VBScript-Datei machen und nenne es CScript mit den Befehlszeilenparameter zu analysieren.
So etwas wie die in MessageBox.vbs
gespeichert folgenden:
Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText
Welche würden Sie nennen wie:
cscript MessageBox.vbs "This will be shown in a popup."
MsgBox
Referenz , wenn Sie interessiert ist, diesen Weg in gehen.
Andere Tipps
Zu allererst DOS hat nichts damit zu tun, werden Sie wahrscheinlich eine Windows-Befehlszeilen Lösung wollen. (Wieder: keine DOS, reine Windows nur kein Fenster, sondern eine Konsole)
Sie können entweder die VBScript-Methode von boflynn benutzen, oder Sie können falschen Gebrauch net send
oder msg
. net send
funktioniert nur bei älteren Versionen von Windows:
net send localhost Some message to display
Dies hängt auch von dem Messenger-Dienst auszuführen, though.
Für neuere Versionen (XP und weiter, scheinbar):
msg "%username%" Some message to display
Es ist zu beachten, dass ein Meldungsfeld mit msg.exe
gesendet wird nur für 60 Sekunden dauern. Dies kann jedoch mit dem /time:xx
Schalter außer Kraft gesetzt werden.
Könnte ein wenig Blitz angezeigt, aber keine temporären Dateien erforderlich. Sollte funktionieren den ganzen Weg zurück zu irgendwo in der (IIRC) IE5 Ära.
mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();
Vergessen Sie nicht, Ihre Klammern zu entkommen , wenn Sie‘ re mit if
:
if 1 == 1 (
mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)
Dies wird eine weitere Eingabeaufforderung Fenster Pop-up:
START CMD /C "ECHO My Popup Message && PAUSE"
Versuchen:
Msg * "insert your message here"
Wenn Sie Windows XP command.com verwenden, wird dies ein Meldungsfenster öffnen.
ein neues cmd Fenster zu öffnen, ist nicht ganz das, was Sie fragen, entnehme ich. Sie können auch VBScript , und verwenden Sie diese mit Ihrer .bat Datei verwenden. Sie würden sie von der BAT-Datei mit diesem Befehl öffnen:
cd C:\"location of vbscript"
Was das bedeutet ist das Verzeichnis command.com von Dateien suchen ändern, dann in der nächsten Zeile:
"insert name of your vbscript here".vbs
Dann erstellen Sie eine neue Notepad Dokument, geben Sie
<script type="text/vbscript">
MsgBox "your text here"
</script>
Sie würden dann speichern dies als eine VBS-Datei (durch „vbs“ am Ende des Dateinamen setzen), wie ‚Alle Dateien‘ speichert in der Dropdown-Feld unter dem Dateinamen (damit es nicht speichern als .txt), dann klicken Sie auf Speichern!
Auf diese Weise Ihre Batch-Datei ein VBS-Skript wird und ein Pop-up zeigen. Nachdem es läuft, wird die Batchdatei, die Zwischendatei löschen.
Der Vorteil MSGBOX ist, dass es wirklich customaziable ist (den Titel ändern, das Symbol usw.), während MSG.EXE ist nicht so viel.
echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
Ein paar mehr Möglichkeiten.
1) Die geekiest und hackiest - der IEXPRESS verwendet kleine exe zu erstellen, die ein Pop-up mit einer einzigen Taste ( kann es zwei weitere Arten von Pop-up-Nachrichten erstellen ). Funktioniert auf jedem Windows ab XP und höher:
;@echo off
;setlocal
;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1
;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1
;pause
;endlocal
;exit /b 0
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=
[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=
2) Mit MSHTA
. Funktioniert auch auf jedem Windows-Rechner von XP und höher (trotz der OP nicht will, „externe“ Sprachen der JavaScript hier wird minimiert). Sollte als .bat
gespeichert werden:
@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */
alert("Hello, world!");
oder in einer Zeile ein:
mshta "about:<script>alert('Hello, world!');close()</script>"
oder
mshta "javascript:alert('message');close()"
oder
mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")
3) Hier ist parametrisierte .bat/jscript
Hybrid (sollte als bat
gespeichert werden). Es nutzt wieder JavaScript trotz der OP Anfrage, aber da es eine Fledermaus ist, kann es als eine Fledermaus-Datei ohne Sorgen genannt werden. Es verwendet POPUP denen ermöglicht ein wenig etwas mehr Kontrolle als die populäreren MSGBOX rel="nofollow . Es verwendet WSH, aber nicht MSHTA wie im Beispiel oben.
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" "%~nx0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);
var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";
function printHelp() {
WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"] [-message \"pop-up message\"]");
}
if (WScript.Arguments.Length==1){
runPopup();
WScript.Quit(0);
}
if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
printHelp();
WScript.Quit(0);
}
if (WScript.Arguments.Length % 2 == 0 ) {
WScript.Echo("Illegal arguments ");
printHelp();
WScript.Quit(1);
}
for (var arg = 1 ; arg<args.Length;arg=arg+2) {
if (args.Item(arg).toLowerCase() == "-title") {
title = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-timeout") {
timeout = parseInt(args.Item(arg+1));
if (isNaN(timeout)) {
timeout=-1;
}
}
if (args.Item(arg).toLowerCase() == "-tom") {
timeout_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-pbm") {
pressed_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-message") {
message = args.Item(arg+1);
}
}
function runPopup(){
var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);
switch(btn) {
// button pressed.
case 1:
WScript.Echo(pressed_message);
break;
// Timed out.
case -1:
WScript.Echo(timeout_message);
break;
}
}
runPopup();
4) und eine jscript.net/.bat
Hybrid (sollte als .bat
gespeichert werden) .Diese Zeit .NET
verwendet und erstellt eine kleine .exe
-Datei, die gelöscht werden:
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
::if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
import System.Windows;
import System.Windows.Forms
var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);
5) und am Ende eines einziger Aufruf von Powershell, die ein Pop-up erstellt (kann von der Kommandozeile oder aus Batch aufgerufen werden, wenn Powershell installiert ist):
powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")
6) Und das Konzept der dbenham hier gesehen
start "" cmd /c "echo(&echo(&echo Hello world! &echo(&pause>nul"
7 ) für eine System-Tray-Benachrichtigungen können Sie versuchen, diese :
call SystemTrayNotification.bat -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question
Hier ist eine Powershell-Variante, die nicht Ladeanordnungen erfordern vor dem Fenster zu schaffen, aber es läuft deutlich langsamer (~ + 50%) als die Powershell MessageBox Befehl hier von @npocmaka geschrieben:
powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)
Sie können die letzten Parameter ändern von „0x0“ auf einen Wert unter im Dialog Symbole angezeigt (siehe Popup Method für weitere Referenz):
0x10 Stopp
0x20 Fragezeichen
0x30 Ausrufezeichen
0x40 Informationen Mark
von dem Microsoft TechNet-Artikel Angepasst Powertipp:. Verwenden Sie Powershell-Pop-Up-Fenster anzeigen
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs
-Sie kann beliebige Zahlen von 0,1,2,3,4 statt 0 (vor dem Symbol ‚+‘) schreiben und hier ist die Bedeutung der einzelnen Nummer:
0 = Ok Button
1 = Ok/Cancel Button
2 = Abort/Retry/Ignore button
3 = Yes/No/Cancel
4 = Yes/No
-Sie kann beliebige Zahlen von 16,32,48,64 statt 16 (nach dem ‚+‘ Symbol) schreiben und hier ist die Bedeutung der einzelnen Nummer:
16 – Critical Icon
32 – Warning Icon
48 – Warning Message Icon
64 – Information Icon
Msg * "Bitte geben Sie Ihre Nachricht hier"
funktioniert gut, nur speichern als .bat-Datei in Notepad oder stellen Sie sicher, das Format auf „alle Dateien“ eingestellt ist
Um dies zu tun, müssen Sie ein kleines Programm, das eine messagebox zeigt, und führen Sie das aus Ihrer Batch-Datei.
Sie können ein Konsolenfenster öffnen, wenn eine Eingabeaufforderung angezeigt wird, aber ein GUI-Meldungsfeld mit cmd.exe und Freunden immer nur ist nicht möglich, AFAIK.
Ich benutze ein Dienstprogramm msgbox.exe von hier genannt: http://www.paulsadowski.com/WSH/cmdprogs.htm
msg * /time:0 /w Hello everybody!
Diese Meldung wartet immer, bis OK geklickt wird (es ist standardmäßig nur 1 Minute dauert) und funktioniert gut in Windows 8.1
Im Anschluss an @ Fowl Antwort, können Sie es mit einem Timeout verbessern können nur 10 Sekunden lang angezeigt werden mit dem folgenden:
mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"
Siehe hier für weitere Details.
Sie können DLL-Funktion von user32.dll aufrufen ich denke, So etwas wie
Rundll32.exe user32.dll, MessageBox (0, "Text", "title", {Extra-Flaggen für wie oberste messagebox e.t.c})
Typing es von meinem Telefon, mich nicht beurteilen ... sonst würde ich die zusätzlichen Flags verbinden.
msg * /server:127.0.0.1 Ihre Nachricht
Die Anwendung das tun können, wenn Sie konvertieren (wrap) Batch-Dateien in ausführbare Dateien.
-
Einfache Messagebox
%extd% /messagebox Title Text
-
Fehler Messagebox
%extd% /messagebox Error "Error message" 16
-
Abbrechen Erneut versuchen Messagebox
%extd% /messagebox Title "Try again or Cancel" 5
4) "mich nie fragen" Messagebox
%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
Eine bessere Option
set my_message=Hello world
&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"
Beschreibung:
lines=
Menge von Linien, plus 1
cols=
Menge von Zeichen in der Nachricht, plus 3 (jedoch mindestens sein 15
muss)
Auto-berechnet cols
Version:
set my_message=Hello world
&& (echo %my_message%>EMPTY_FILE123 && FOR %? IN (EMPTY_FILE123 ) DO SET strlength=%~z? && del EMPTY_FILE123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my_message% && pause>nul"
Es braucht nur zu Popup, wenn innerhalb eines vm, so technisch, sollte es einige Code wie:
if %machine_type% == virtual_machine then
echo message box code
else
continue normal installation code